<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Entities extends Controller_Common {

	public $template='layout/index';

	public function action_index() {
		$u = Cookie::get('user', NULL);

		if (!empty($u)) { // если пользователь залогинен то показываем ему его личный кабинет и шлём нахуй
			$this->request->redirect('/entities/cabinet');
			exit();
		}

		$this->buildCarcas(); // строим каркас для страниц с левым блоком

		$captcha = Captcha::instance();
		$captcha_image = $captcha->render();

		$this->template->rightContent=View::factory('pages/entities', array(
			'captcha_image' => $captcha_image,
			'captcha_error' => FALSE
		));
	}

	public function action_auth() {
		$userObj = ORM::factory('users', array('email' => $_POST['login'], 'password' => md5($_POST['password'])));

		if (!empty($userObj->email)) {
			Cookie::set('user', $userObj->email);
			$this->request->redirect('/entities/cabinet');
		}
		else {
			$this->buildCarcas(); // строим каркас для страниц с левым блоком
			$captcha = Captcha::instance();
			$captcha_image = $captcha->render();

			$this->template->rightContent=View::factory('pages/entities', array(
				/*'captcha' => $captcha,*/
				'authError' => 'Неверный логин или пароль!',
				'captcha_image' => $captcha_image,
				'captcha_error' => FALSE
			));
		}

	}

	public function action_logout() {
		Cookie::delete('user');
		$this->request->redirect('/');
	}

	public function action_register() {
		$this->buildCarcas(); // строим каркас для страниц с левым блоком

		$post = Validation::factory($_POST); // валидируем данные с формы
		$post->rule(TRUE, 'not_empty')
			->rule(TRUE, 'max_length', array(':value', 30))
			->rule('responsiblePerson', 'regex', array(':value', '/\D/'))
			->rule('companyName', 'regex', array(':value', '/\D/'))
			->rule('phone', 'phone')
			->rule('email', 'email')
			->rule('password', 'alpha_numeric', array(':value', TRUE))
			->rule('passwordRepeat', 'alpha_numeric', array(':value', TRUE))
			->rule('passwordRepeat', 'matches', array(':validation', 'passwordRepeat', 'password'));

		if ($post->check() && Captcha::valid($_POST['captcha'])) { // если данные прошли валидацию то регистрируем нового пользователя
			$activationCode = md5($this->request->post('email').time());
		    $newUser = ORM::factory('users');
		    $newUser->email = $this->request->post('email');
		    $newUser->password = md5($this->request->post('password'));
		    $newUser->responsible_person = htmlspecialchars($this->request->post('responsiblePerson'), ENT_QUOTES);
		    $newUser->company_name = htmlspecialchars($this->request->post('companyName'), ENT_QUOTES);
		    $newUser->phone = $this->request->post('phone');
		    $newUser->activation_code = $activationCode;

		    DB::delete('subscribers')->where('email', '=', $newUser->email)->execute();
		    $subscribe = ORM::factory('subscribers');
		    $subscribe->name = $newUser->responsible_person;
		    $subscribe->email = $newUser->email;
		    $subscribe->type = 1;
		    $subscribe->save();

		    try {
			    if ($newUser->save()) { // если успешно сохранили то отправляем письмо с активацией на емаил
				    $config = Kohana::$config->load('email');
				    Email::connect($config);
				    $to = $newUser->email; // Может быть массивом
				    $subject = 'Подтвержение регистрации на сайте bell.kz';
				    $from = 'noreply@bell.kz';

				    $message = '
				    	<div>
				    		Для подтверждения регистрации пройдите по ссылке: <br />
				    		<a href="http://bell.zuber.kz/entities/activation?code='.$activationCode.'">
	                                                 http://bell.zuber.kz/entities/activation?code='.$activationCode.'
	                                        </a>
				    	</div>
				    ';

				    Email::send($to, $from, $subject, $message, $html = true);

				    $r = '
				    	<div id="mainContent">
				    		<h2>Регистрация прошла успешно!</h2>
				    		<div>Проверьте свой email и подтвердите регистрацию.</div>
				    	</div>
				    ';
			    }
		    }
		    catch (Exception $e) {
			    $r = '
			    	<div id="mainContent">
			    		<h2>Ошибка регистрации!</h2>
			    		<div>Такой email адрес уже зарегистрирован.</div>
			    	</div>
			    ';
		    }

			$this->template->rightContent=$r;
		}
		else { // иначе показываем пользователю неправильно заполненные поля
			if (!Captcha::valid($_POST['captcha'])) {
				$captcha_error = TRUE;
			}
			else {
				$captcha_error = FALSE;
			}

			$captcha = Captcha::instance();
			$captcha_image = $captcha->render();

			$this->template->rightContent=View::factory('pages/entities', array(
				'errors' => $post->errors(),
				'captcha_image' => $captcha_image,
				'captcha_error' => $captcha_error
			));
		}
	}

	public function action_activation() {
		$this->buildCarcas(); // строим каркас для страниц с левым блоком
		$userObj = ORM::factory('users', array('activation_code' => $_GET['code'])); // ищем пользователя с запрошенным кодом активации

		if (!empty($userObj->email)) { // если код активации найден, то активируем пользователя
			$userObj->activated = 1;
			$userObj->save();
			$this->template->rightContent = '
				<div id="mainContent">
					<h2>Активация прошла успешно!</h2>
					Перейти на <a href="/">главную страницу</a>.
				</div>
			';
		}
		else {
			$this->template->rightContent = '
				<div id="mainContent">
					<h2>Ошибка!</h2>
					Неверный код активации.
				</div>
			';
		}
	}

	public function action_cabinet() {
		$this->buildCarcas(); // строим каркас для страниц с левым блоком
		$this->template->rightContent = View::factory('pages/personal_cabinet', array(
			'user' => $this->template->user
		));
	}

	public function action_edit() {
		$this->buildCarcas(); // строим каркас для страниц с левым блоком
		$post = Validation::factory($_POST); // валидируем данные с формы
		$post->rule('responsiblePerson', 'regex', array(':value', '/\D/'))
			->rule('companyName', 'regex', array(':value', '/\D/'))
			->rule('phone', 'phone');

		$pass = $this->request->post('password');

		if (!empty($pass)) { // если поле пароля не пустое
			$post->rule('password', 'alpha_numeric', array(':value', TRUE))
				->rule('passwordRepeat', 'alpha_numeric', array(':value', TRUE))
				->rule('passwordRepeat', 'matches', array(':validation', 'passwordRepeat', 'password'));
		}

		if ($post->check()) { // если данные прошли валидацию то регистрируем нового пользователя
			$userObj = ORM::factory('users', $this->template->user->id); // ищем пользователя

			if (!empty($pass)) { //если поле пароля не пустое
				$userObj->password = md5($this->request->post('password'));
			}

		    $userObj->responsible_person = htmlspecialchars($this->request->post('responsiblePerson'), ENT_QUOTES);
		    $userObj->company_name = htmlspecialchars($this->request->post('companyName'), ENT_QUOTES);
		    $userObj->phone = $this->request->post('phone');

		    $userObj->save();
			$this->request->redirect('/entities/cabinet');
		}
		else { // иначе показываем пользователю неправильно заполненные поля
			$this->template->rightContent=View::factory('pages/personal_cabinet', array(
				'errors' => $post->errors(),
			));
		}
	}

}